package br.com.cast.notaFiscal.produto.paginas;

import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.RequiredTextField;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.validation.validator.StringValidator;

import br.com.cast.notaFiscal.HomePage;
import br.com.cast.notaFiscal.excecoes.ProdutoJaCadastrado;
import br.com.cast.notaFiscal.models.Produto;
import br.com.cast.notaFiscal.produto.paginas.ListarProduto;
import br.com.cast.notaFiscal.services.IProdutoService;
import br.com.cast.notaFiscal.util.ComponentUtil;


public class FormProduto extends Form<Produto> {
	private static final long serialVersionUID = 1L;
	@SpringBean
	private IProdutoService produtoService;

	public FormProduto(String id) {
		super(id, new CompoundPropertyModel<Produto>(new Produto()));
		criaCampoDescricao();

		criaCampoValor();

		criaLinkCancelar();
	}
	private void criaLinkCancelar() {
		add(new Link("cancelar") {
			@Override
			public void onClick() {
				redirecionaListar();
			}
		});
	}


	private void criaCampoValor() {
		add(new RequiredTextField<>("valor"));
	}

	private void criaCampoDescricao() {
		add(new RequiredTextField<>("descricao")
				.add(new StringValidator(0, 50)));
	}
	
	@Override
	protected void onSubmit() {
		Produto prod = (Produto) getDefaultModelObject();
		
		try {
			produtoService.salvar(prod);
			HomePage template = redirecionaListar();
			template.success("Registro inserido com sucesso!");
		} catch (ProdutoJaCadastrado e) {
			error(e.getMessage());
		}
	}
	

	private HomePage redirecionaListar() {
		HomePage template = ComponentUtil.getTemplate(this);
		template.replace(new ListarProduto(HomePage.ID_CONTEUDO));
		return template;
	}

}
